再開發網站或是api的時候,多多少少都會將 不太常改又不想放資料庫 或是根本沒有資料庫的東西 通通塞到 appSettings裡面
也就容易到處出現var appSettingEnableDemo = ConfigurationManager.AppSettings["EnableDemo"];
這樣的程式碼,但是這樣就又都是 Magic strings了
Web.Config 還是App.Config 都可以使用 appSettings 放值<add key="EnableDemo" value="true"/>
取值的時候 還有考慮取不到的問題 跟 轉型的問題
這時候的程式碼可能會像是這樣
var appSettingEnableDemo = ConfigurationManager.AppSettings["EnableDemo"];
var enableDemo = false;
if (!string.IsNullOrEmpty(appSettingEnableDemo))
{
bool.TryParse(appSettingEnableDemo, out enableDemo);
}
然後很多地方要用到就會到處都是這樣的程式碼
可以用試煉1 - Magic strings學到的觀念 建立出下面的class
void Main()
{
AppSetting.EnableDemo.Dump();
AppSetting.EnableDemo.Dump();;
}
public class AppSetting
{
private static bool? _enableDemo;
public static bool EnableDemo
{
get
{
if (!_enableDemo.HasValue)
{
//var appSettingEnableDemo = ConfigurationManager.AppSettings["EnableDemo"];
var appSettingEnableDemo = "true";//LINQPad 的關係 直接給值
var enableDemo = false;
if (!string.IsNullOrEmpty(appSettingEnableDemo))
{
bool.TryParse(appSettingEnableDemo, out enableDemo);
}
_enableDemo = enableDemo;
}
return _enableDemo.Value;
}
}
}
好處是可以給預設值 跟 讀一次就放到記憶體 不用重複讀取
設定appSettings後 就一起把AppConfig class 對應的程式碼也寫好
這樣自己或其他人呼叫就會很方便
也可以寫一個泛型方法來運用 可以看下面的連結
如何讀取Web.config中的AppSettings
AppSettings fallback/default value?
可以寫T4程式自動產生出AppSetting class 這裡有專案可以參考
https://github.com/motowilliams/T4-AppSettings
題外話 單元測試也可以appSettings做模擬的
Testing codes with ConfigurationManager.AppSettings
一個 appSettings 可以有這些試煉 好像是我一開始沒有想到的